home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / db / esm-3.1 / esm-3 / usr / local / sm / src / serverlib / thread / threadRestart.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-05  |  3.0 KB  |  101 lines

  1. /*
  2.  *   $RCSfile: threadRestart.c,v $  
  3.  *   $Revision: 1.2 $  
  4.  *   $Date: 1996/05/04 23:51:55 $      
  5.  */ 
  6. /**********************************************************************
  7. * EXODUS Database Toolkit Software
  8. * Copyright (c) 1991 Computer Sciences Department, University of
  9. *                    Wisconsin -- Madison
  10. * All Rights Reserved.
  11. *
  12. * Permission to use, copy, modify and distribute this software and its
  13. * documentation is hereby granted, provided that both the copyright
  14. * notice and this permission notice appear in all copies of the
  15. * software, derivative works or modified versions, and any portions
  16. * thereof, and that both notices appear in supporting documentation.
  17. *
  18. * THE COMPUTER SCIENCES DEPARTMENT OF THE UNIVERSITY OF WISCONSIN --
  19. * MADISON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.  
  20. * THE DEPARTMENT DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
  21. * WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  22. *
  23. * The EXODUS Project Group requests users of this software to return 
  24. * any improvements or extensions that they make to:
  25. *
  26. *   EXODUS Project Group 
  27. *     c/o David J. DeWitt and Michael J. Carey
  28. *   Computer Sciences Department
  29. *   University of Wisconsin -- Madison
  30. *   Madison, WI 53706
  31. *
  32. *     or exodus@cs.wisc.edu
  33. *
  34. * In addition, the EXODUS Project Group requests that users grant the 
  35. * Computer Sciences Department rights to redistribute these changes.
  36. **********************************************************************/
  37.  
  38. #include "sysdefs.h"
  39. #include "ess.h"
  40. #include "checking.h"
  41. #include "trace.h"
  42. #include "error.h"
  43. #include "list.h"
  44. #include "tid.h"
  45. #include "io.h"
  46. #include "lock.h"
  47. #include "object.h"
  48. #include "msgdefs.h"
  49. #include "thread.h"
  50. #include "thread_funcs.h"
  51. #include "thread_globals.h"
  52.  
  53.  
  54.  void
  55. threadRestart ()
  56.  
  57. {
  58.  
  59. #ifdef mips
  60.     TRPRINT(TR_THREAD, TR_LEVEL_1, ("Restarting thread:%d SP:%x",
  61.             Active->id, Active->initBuf[JB_SP]));
  62. #elif defined(sparc)
  63.     TRPRINT(TR_THREAD, TR_LEVEL_1, ("Restarting thread:%d SP:%x",
  64.             Active->id, Active->initBuf[JB_SP_SPARC]));
  65. #elif defined(linux)
  66.     TRPRINT(TR_THREAD, TR_LEVEL_1, ("Restarting thread:%d SP:%x",
  67.             Active->id, LINUX_JB_SP(Active->initBuf)));
  68. #elif defined(_AIX)
  69.     TRPRINT(TR_THREAD, TR_LEVEL_1, ("Restarting thread:%d SP:%x",
  70.             Active->id, Active->initBuf[JB_SP_AIX]));
  71. #elif defined(hpux)
  72.     TRPRINT(TR_THREAD, TR_LEVEL_1, ("Restarting thread:%d SP:%x",
  73.             Active->id, HPPA_JB_SP(Active->initBuf)));
  74. #elif !(defined(mips) || defined(sparc) || defined(_AIX) || defined(hpux) || defined(linux))
  75.     not supported
  76. #else
  77.     /* this else should have the not supported code, but the
  78.        ultrix cpp is broken */
  79. #endif
  80.  
  81. #ifdef DEBUG
  82.     /* this thread should not hold any semaphores */
  83.     /* We cannot have any SM_ASSERTs or SanityCheck()s 
  84.      * until the first longjmp
  85.      * has been done, to get the system running on the
  86.      * little stacks!
  87.      */
  88.     /* SM_ASSERT(LEVEL_3, Active->semCount == 0); */
  89.     if( Active->semCount != 0) {
  90.         SM_ERROR(TYPE_FATAL, esmASSERT);
  91.     }
  92. #endif DEBUG
  93.  
  94.     reinitTcb(Active);
  95.  
  96.     /*
  97.      *    jump to the right place
  98.      */
  99.     longjmp(Active->initBuf, 0);
  100. }
  101.